iT邦幫忙

2025 iThome 鐵人賽

DAY 29
0
佛心分享-SideProject30

最近的工程師真沒用系列 第 29

第二十九天-Cloudflare 人人都有小祕密 Secrets Store

  • 分享至 

  • xImage
  •  

我們再次登入 cloudfalre 左側那排,workers 下面有個 secrets store,我們先新增一個變數
然後我們再新增到 wrangler.jsonc

"secrets_store_secrets": [
		{
			"binding": "turnstile_key",
			"store_id": "f9a2d4739e3f4c4a8df3310ce83bf8aa",
			"secret_name": "turnstile_key"
		}
	]

基本上 binding、secret_name 就用你名稱就好
store_id 每個帳號都有自己的一組,通常點進去那個頁面就可以找到識別碼了
然後呢在程式碼中取用你只需要

import type { RequestHandler } from './$types';
import { hashPassword } from '$lib/server/auth';
import type { ClientUsers } from '$lib/server/schema/ClientUsers';
export const POST: RequestHandler = async ({ request, cookies, platform }) => {
	const { username, password, token } = await request.json();

	const stmt = await platform.env.DB.prepare('SELECT * FROM client_users WHERE username = ?');
	const { results } = await stmt.bind(username).run();
	console.log(token);
	console.log(results);

	if (!Array.isArray(results) || results.length === 0) {
		return new Response(JSON.stringify({ message: 'User not found' }), { status: 401 });
	}
	try {
        // 這行取得
		const APIkey = await platform.env.turnstile_key.get();
		const res = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
			method: 'POST',
			headers: { 'Content-Type': 'application/json' },
			body: JSON.stringify({ secret: APIkey, response: token })
		});
		console.log(await res.json());
	} catch (error) {
		console.error('Turnstile validation error:', error);
		return { success: false, 'error-codes': ['internal-error'] };
	}
}

不過要注意的是,這跟前面 D1 一樣,你本地測試要用,需要自己用命令列建立喔,他不會自己拉遠端的

今天情緒抒發:

今天壓力變很小了,明天的寫好了,終於要結束了


上一篇
第二十八天-Cloudflare Turnstile 後端驗證
下一篇
第三十天-完賽感言
系列文
最近的工程師真沒用30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言